<?php
// use \myExample\MyAttribute;
// IS_REPEATABLE允许注解在声明中出现多次
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
class MyAttribute
{
    public $value;

    public function __construct($value = null)
    {
        $this->value = $value;
    }
}
// #[MyAttribute]
// #[MyAttribute(123)]
// #[MyAttribute(MyAttribute::VALUE)]
// #[MyAttribute(100 + 200)]
#[MyAttribute(value: 123)] // 给注解属性赋值
class Things
{

}

#[MyAttribute]
#[MyAttribute(value: 988)]
class AnotherThing
{

}


function dumpAttributeData($reflection)
{
    $attributes = $reflection->getAttributes();
    foreach ($attributes as $attribute) {
        var_dump($attribute->getName()); // 获得注解的名字
        var_dump($attribute->getArguments()); // 获取注解参数
        var_dump($attribute->newInstance()); // 实例化一个注解
    }
}

dumpAttributeData(new ReflectionClass(AnotherThing::class));
